package terra.model;

import java.util.Random;

import terra.model.object.GameObject;
import terra.model.object.LiveObject;
import terra.network.Connections;
import terra.network.packet.server.battle.HitInfo;

public class Formulas {
	static Random rnd = new Random();

	/*
	 * Вычисляем урон в урон входит сам урон, если удар критический, то урон
	 * умножается на множитель крит. удара. урон уменьшается на фактическое
	 * количество защиты цели TODO некоторые расы должны иметь шанс блока урона,
	 * другие - шанс отразить урон.
	 */
	public static float calcDamage(GameObject attacker, GameObject attackable,
			float damage) {
		if (attacker == null || attackable == null)
			return damage;
		damage = damage / 100 * (90 + rnd.nextInt(20));
		HitInfo info = new HitInfo();
		info.attackoId = attacker.getObjectId();
		info.targetOId = attackable.getObjectId();
		if (attacker instanceof LiveObject && attackable instanceof LiveObject) {
			LiveObject attackChar = (LiveObject) attacker;
			LiveObject attackableChar = (LiveObject) attackable;
			if (rnd.nextFloat() <= attackChar.getStat().getCriticalChance()) {
				damage *= attackChar.getStat().getCriticalPower();
				info.isCrit = 1;
			}
			damage -= attackableChar.getStat().getDefenseRate();
		}
		info.damage = (int) damage;
		Connections.broadcast(info);
		return damage;
	}
}
